package com.zpfjava.quickhit;

import java.util.Random;

/**
 * 游戏类
 */

public class Game {
    /**
     * 1. 引入玩家类
     */
    private Player player;

    /**
     * 2.游戏被玩家玩
     *
     * @param player
     */
    public Game(Player player) {
        this.player = player;
    }

    /**
     * 3.游戏随机输出字符串
     *
     * @return 输出的字符串，用于和玩家输入的比较
     */
    public String printStr() {
        //1.获取一次输出的字符串的长度
        int strLength = LevelParam.levels[player.getLevelNo() - 1].getStrLength();
        //2.定义动态拼接字符串的对象
        StringBuffer sbf = new StringBuffer();
        //3.创建生成随机数的对象
        Random random = new Random();
        //4.循环拼接生成要输出的字符串
        for (int i = 0; i < strLength; i++) {
            //4.1 产生随机数
            int rand = random.nextInt(strLength);
            //4.2 根据随机数拼接字符串
            switch (rand) {
                case 0:
                    sbf.append(">");
                    break;
                case 1:
                    sbf.append("<");
                    break;
                case 2:
                    sbf.append("*");
                    break;
                case 3:
                    sbf.append("&");
                    break;
                case 4:
                    sbf.append("%");
                    break;
                case 5:
                    sbf.append("#");
                    break;
            }
        }
        //5.输出字符串
        System.out.println(sbf.toString());

        //6.返回字符串用于和玩家输入做对比
        return sbf.toString();
    }

    /**
     * 4.游戏判断玩家输入是否正确，并输出相应结果
     *
     * @param outStr 游戏打印的输出字符串
     * @param inStr  玩家输入的字符串
     */
    public void printResult(String outStr, String inStr) {
        //1.输入正确
        if (outStr.equals(inStr)) {
            //1.1 获取当前系统时间(毫秒为单位)
            long currentTime = System.currentTimeMillis();
            //1.2游戏时间=当前时间-开始时间（秒）
            long palytime = (currentTime - player.getStartTime()) / 1000;
            //1.3游戏规定的时间限制
            long limitTime = LevelParam.levels[player.getLevelNo() - 1].getTimeLimit();
            //1.4判断游戏是否超时
            if (palytime > limitTime) {
                //1.4.1 超时
                System.out.println("你输入太慢，已经超时，退出！！");
                System.exit(1);
            } else {
                //1.4.2 没有超时
                //1.4.2.1 计算当前积分=原来积分+当前等级游戏积分
                //原来积分
                int currentScore = player.getCurScore();
                //当前等级成功输入一次的游戏积分
                int playPerScore = LevelParam.levels[player.getLevelNo() - 1].getPerScore();
                //玩完当局之后设置当前的积分
                player.setCurScore(currentScore + playPerScore);
                //1.4.2.2 计算已用时间
                player.setElapsedTime((int) palytime);
                //1.4.2.3 输出当前积分，当前级别，已用时间
                System.out.println("输入正确，您的级别"
                        + player.getLevelNo()
                        + ",您的积分" + player.getCurScore()
                        + ",已用时间" + player.getElapsedTime());
                //1.4.2.4 判断用户是否已经闯过最后一关
                if (player.getLevelNo() == LevelParam.levels.length) {
                    //计算闯关分数
                    int perScore = LevelParam.levels[player.getLevelNo() - 1].getPerScore();
                    //获取当前关的局数
                    int perNum = LevelParam.levels[player.getLevelNo() - 1].getStrTime();
                    //计算每关的总积分
                    int score = perScore * perNum;
                    //判断是否最后通关
                    if (player.getCurScore() == score) {
                        System.out.println("恭喜你已经通关成功，成为绝世高手！");
                        System.exit(0);
                    }

                }
            }
        } else {
            //2.输入不正确
            System.out.println("输入错误，退出！");
            System.exit(0);
        }
    }

    public Player getPlayer() {
        return player;
    }

    public void setPlayer(Player player) {
        this.player = player;
    }

}

